Efficiency of Extended Static Checkers
نویسنده
چکیده
Most research in computer science, software engineering, formal methods, and perhaps a few other programming-related disciplines contributes techniques and ideas that improve the quality of software. The quality has two faces. A program is good if it does what the programmers intended. A program is really good if it does what its users want. The problem of making programmers’ intentions agree with the users’ requirements will be neatly covered under the rug in what follows. Rest assured, there are many qualified people working on it. So let us shift the focus towards making programs agree with programmers. For sure, no programmer wants their editor to change the selected region after a search and replace operation, or to suddenly display a blue screen and stop react to user input. These disagreements between the program and the programmer are commonly called bugs. An empirical study [CAHM04] of active open source projects revealed that the average number of bugs per project is 509 and the median is 279. Moreover, projects with many downloads tend to also have many developers, many bug reports, and low bug-fixing time. It is not clear how these numbers should be interpreted, but I believe they do show that programs have bugs. They also show that bugs should be fixed early. Extrapolating, it seems a good idea to fix bugs before they reach the users. Many programming tools, including compilers, are actively pointing to possible trouble spots. Programmers are actively looking for bugs too. Yet, bugs still reach users in high numbers. It is quite unlikely that one idea or technique that decisively impacts the number of bugs released to users will be found [FPB95]. Instead, the constant stream of research output, together with advocacy and teaching, will steadily raise the bar. Even if this is the most likely future evolution, most people, including researchers, can’t stop to have personal favorite techniques. My current favorite is extended static checking [BLS04]. And, judg-
منابع مشابه
Edit and verify
Automated theorem provers are used in extended static checking, where they are the performance bottleneck. Extended static checkers are run typically after incremental changes to the code. We propose to exploit this usage pattern to improve performance. We present two approaches of how to do so and a full solution.
متن کاملSecurity Audit using Extended Static Checking: Is It Cost-effective Yet?
This paper describes our experience of doing variation analysis of known security vulnerabilities in C++ projects including core operating system and browser COM components, using an extended static checker HAVOC-LITE. We describe the extensions made to the tool to be applicable on such large components, along with our experience of using an extended static checker in the large. We argue that t...
متن کاملCollaborative Verification and Testing with Explicit Assumptions
Many mainstream static code checkers make a number of compromises to improve automation, performance, and accuracy. These compromises include not checking certain program properties as well as making implicit, unsound assumptions. Consequently, the results of such static checkers do not provide definite guarantees about program correctness, which makes it unclear which properties remain to be t...
متن کاملExtended Static Checking: A Ten-Year Perspective
A powerful approach to finding errors in computer software is to translate a given program into a verification condition, a logical formula that is valid if and only if the program is free of the classes of errors under consideration. Finding errors in the program is then done by mechanically searching for counterexamples to the verification condition. This paper gives an overview of the techno...
متن کاملExploiting Shared Structure in Software Verification Conditions
Despite many advances, today’s software model checkers and extended static checkers still do not scale well to large code bases, when verifying properties that depend on complex interprocedural flow of data. An obvious approach to improve performance is to exploit software structure. Although a tremendous amount of work has been done on exploiting structure at various levels of granularity, the...
متن کاملModular Enforcement of Supertype Abstraction and Information Hiding with Client-Side Checking
Static reasoning tools for object-oriented (OO) languages use supertype abstraction, by verifying calls to methods using the specification associated with the receiver’s static type. Unfortunately, contemporary runtime assertion checkers for OO are inconsistent with such static reasoning tools, since they check assertions in an overly-dynamic way on the supplier side. For method calls, such sup...
متن کامل